/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.sena.zocode.modelo.DAO;

import co.edu.sena.zocode.modelo.VO.CategoriaVO;
import co.edu.sena.zocode.modelo.VO.PresentacionVO;
import co.edu.sena.zocode.modelo.VO.ProductoVO;
import co.edu.sena.zocode.modelo.VO.UnidadMedidaVO;
import co.edu.sena.zocode.modelo.conexion.Conexion;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author SANDRA
 */
public class ProductoDAO extends Conexion {

    public int insertarProductos(ProductoVO nuevoProducto) {
        int res = -1;
        try {
            conectar();
            PreparedStatement sentencia = cnn.prepareStatement(" insert into Productos (nombre_prod,codProducto, "
                    + "categorias_idcategoria, presentaciones_idpresentacion, unidadMedida_idTipounidadMedida)"
                    + " values (?,?,?,?,?)");

            sentencia.setString(1, nuevoProducto.getNombre_prod());
            sentencia.setString(2, nuevoProducto.getCodProducto());
            sentencia.setInt(3, nuevoProducto.getCategoria().getIdCategoria());
            sentencia.setInt(4, nuevoProducto.getPresentacion().getIdPresentacion());
            sentencia.setInt(5, nuevoProducto.getUnidad_medida().getIdUnidadMedida());

            res = sentencia.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            desconectar();
        }
        return res;
    }

    public ArrayList<ProductoVO> consultarProductos() {
        ArrayList<ProductoVO> lista = new ArrayList<>();

        try {
            conectar();
            PreparedStatement sent = cnn.prepareStatement(" select * from Productos");
            //Construir una vista o una funcion que devuelva los nombres de categorias,
            //presentaciones, y unidades de medida de cada producto
            ResultSet resul = sent.executeQuery();
            while (resul.next()) {
                String nombre_prod = resul.getString("nombre_prod");
                String codigoProducto = resul.getString("codProducto");

                CategoriaVO thisCategory = new CategoriaVO();
                thisCategory.setIdCategoria(resul.getInt("categorias_idcategoria"));

                PresentacionVO thisPresentation = new PresentacionVO();
                thisPresentation.setIdPresentacion(resul.getInt("presentaciones_idpresentacion"));

                UnidadMedidaVO thisMeasureUnity = new UnidadMedidaVO();
                thisMeasureUnity.setIdUnidadMedida(resul.getInt("unidadMedida_idTipounidadMedida"));

                ProductoVO data = new ProductoVO(codigoProducto, nombre_prod,
                        thisCategory, thisPresentation, thisMeasureUnity);

                lista.add(data);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            desconectar();
        }
        return lista;
    }

    public int eliminarProductos(int id) {
        int res = -1;
        try {
            conectar();
            PreparedStatement sentencia = cnn.prepareStatement("delete from Productos where idproducto=?");
            sentencia.setInt(1, id);
            res = sentencia.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            desconectar();
        }
        return res;
    }

    public int modificarProductos(ProductoVO productoModificable) {
        int res = -1;
        try {
            conectar();
            PreparedStatement sentencia = cnn.prepareStatement(" update productos set Nombre_prod=?, "
                    + "codProducto=?,categorias_idcategoria=?,presentaciones_idpresentacion=?,"
                    + "unidadMedida_idTipounidadMedida=?"
                    + "where idproducto=?");

            sentencia.setInt(0, productoModificable.getIdproducto());
            sentencia.setString(1, productoModificable.getNombre_prod());
            sentencia.setInt(2, productoModificable.getCategoria().getIdCategoria());
            sentencia.setInt(3, productoModificable.getPresentacion().getIdPresentacion());
            sentencia.setInt(4, productoModificable.getUnidad_medida().getIdUnidadMedida());

            res = sentencia.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            desconectar();
        }
        return res;
    }

}
